/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.aratuk.manager;

import br.com.aratuk.modelo.*;
import br.com.aratuk.servico.ApostaServico;
import br.com.aratuk.servico.JogoServico;
import br.com.aratuk.servico.PrecoLoteriaServico;
import br.com.aratuk.util.Mensagem;
import java.io.Serializable;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.json.JSONObject;

/**
 *
 * @author roniere
 */
@ManagedBean
@ViewScoped
public class ManagerAposta implements Serializable {

    @EJB
    JogoServico jogoServico;
    @EJB
    ApostaServico apostaServico;
    @EJB
    PrecoLoteriaServico precoLoteriaServico;
    private Jogo jogo;
    private Loteria loteria;
    private Aposta aposta;
    private String ticket;
    private boolean multiplicador;
    private PrecoLoteria precoLoteria;
    private int expiraEm;

    @PostConstruct
    public void init() {
        System.err.println(apostaServico.findAll());
        aposta = new Aposta();

        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        if (parametros.get("jogo") != null) {
            jogo = jogoServico.find(Long.parseLong(parametros.get("jogo")));
            
            Calendar date = Calendar.getInstance();
            expiraEm = secondDifference(jogo.getDataExpiracao(), date.getTime());
            
            System.err.println(expiraEm);
            loteria = jogo.getLoteria();
            precoLoteria = precoLoteriaServico.getPrecoPorLoteria(loteria);
        }

    }

    public PrecoLoteria getPrecoLoteria() {
        return precoLoteria;
    }

    public void setPrecoLoteria(PrecoLoteria precoLoteria) {
        this.precoLoteria = precoLoteria;
    }

    public Aposta getAposta() {
        return aposta;
    }

    public void setAposta(Aposta aposta) {
        this.aposta = aposta;
    }

    public Jogo getJogo() {
        return jogo;
    }

    public void setJogo(Jogo jogo) {
        this.jogo = jogo;
    }

    public Loteria getLoteria() {
        return loteria;
    }

    public void setLoteria(Loteria loteria) {
        this.loteria = loteria;
    }

    public String getTicket() {
        return ticket;
    }

    public void setTicket(String ticket) {
        this.ticket = ticket;
    }

    public void jogar() {
        try {
            List<Linha> linhas = apostaServico.jsonToAposta(ticket);

            aposta.setMultiplicador(multiplicador);
            aposta.setJogo(jogo);
            aposta.setDataAposta(new Date());
            aposta.setLinhas(linhas);

            for (Linha linha : linhas) {
                linha.setAposta(aposta);
            }

            //TODO fazer!
            aposta.setCliente(null);

            apostaServico.save(aposta);
            Mensagem.messagemInfo();

            System.err.println(aposta.getLinhas());
        } catch (Exception e) {
            e.printStackTrace();
            Mensagem.messagemError();
        }


    }

    public boolean isMultiplicador() {
        return multiplicador;
    }

    public void setMultiplicador(boolean multiplicador) {
        this.multiplicador = multiplicador;
    }

    private static int secondDifference(Date date1, Date date2) {

        final int MILLI_TO_HOUR = 1000;
        return (int) (date1.getTime() - date2.getTime()) / MILLI_TO_HOUR;
    }

    public int getExpiraEm() {
        return expiraEm;
    }

    public void setExpiraEm(int expiraEm) {
        this.expiraEm = expiraEm;
    }
}
